Computación Estadística con R

Alex Antequeda Campos

Sesión 1

Programa del Curso

  • Introducción a R.
  • Instalación, entorno y estructura de datos.
  • Lectura y Manipulación/Transformación de datos.
  • Funciones y familia Apply.
  • Visualización con ggplot2 y algo de Plotly.
  • Reportes (R Markdown).

Clases

  • Cada clase tendrá una parte expositiva, ejercicios conjuntos y actividades.
  • Si hay dudas, interrumpir. No existen preguntas tontas!.
  • Todos escribiremos código.
  • Todo el material estará en la página del curso.

Introducción a R

¿Por qué R?

  • R es un lenguaje de programación para Computación Estadística. ¿ Existen programas similares, por qué usar R?
  • R es Gratis.
  • Existe una gran comunidad que lo utiliza.
  • Puede manejar prácticamente cualquier formato de datos.
  • Es un lenguaje, por lo que puede hacer todo.
  • Es un buen trampolín para otros lenguajes como Python.

Descarga e Instalación

Interfaz de RStudio

Estructura de Datos

Vectores

Los vectores los creamos con elementos del mismo tipo a través de la función c( ) (concatenar). En caso de mezclar caracteres con datos numéricos, el vector se considerará caracter.

## [1]  1.00  4.00  3.14 -2.00

Dimensión/largo del vector

## [1] 4

Vectores (cont.)

Vectores reciclados

## [1] 1.5 4.0 3.5 6.0
## [1] 1.5 4.0 3.5 6.0

Vectores (cont.)

Un escalar es un caso especial

## [1]  3 -3  7
## Warning in c(0.5, 2) + c(4, -1, 10): longer object length is not a multiple
## of shorter object length
## [1]  4.5  1.0 10.5

Obs: No reciclar para no tener sorpresas en los cálculos.

Matemática en vectores

Algunas funciones operan sobre todo un vector y no sobre cada elemento.

## [1] 1 4 9
## [1] 11

Algunas otras funciones: mean(),max(), min(),median(), sd(), var().

Ejemplo: Estandarizando datos

Supongamos que obtuvimos algunos valores de mediciones de ph y queriamos ponerlos en una escala estandarizada: \[ph^* = \dfrac{x_i- mean(x)}{sd(x)}\]

## [1] -1.12 -0.70 -0.43 -1.21  0.22  0.42 -0.11  1.61  1.32

Ejercicio: Realizar la función scale() sobre el vector de datos y comparar.

Tipos de vectores

Las funciones class() o str() nos indican que tipo de vectores tenemos.

  • Numérico: c(-2, 14*3, 1/2, -3.14) , Entero: 0:10
  • caracter: c(“orange”, “red”, “yellow”, “green”)
  • factor: factor(c(“orange”, “red”, “yellow”))
  • lógico: c(FALSE, FALSE, TRUE)

Generando vectores numéricos

## [1] -2.00 -0.25  1.50  3.25  5.00
## [1] -1  0  1 -1  0  1 -1  0  1
## [1] -1 -1 -1  0  0  0  1  1  1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Generando vectores no numéricos

##  [1] a b c b c c a c a c c b a a a b c c a c
## Levels: a b c
## [1] "a" "b" "c"
## [1] "b" "c" "a"

Generando vectores lógicos

## [1] 5 8 7 6
## [1] TRUE TRUE TRUE TRUE

Obs: Se puede realizar calculos con vectores lógicos, porque You can do math with logical vectors, because TRUE=1 y FALSE=0

Combinando condiciones lógicas

Si quisieramos solo los nombres con más de 6 letras:

## [1] FALSE  TRUE  TRUE FALSE

Si quisieramos solo los nombres donde la cuanrta letra es “r”:

## [1]  TRUE FALSE FALSE  TRUE

Operadores lógicos

  • & es “AND” (Ambas condiciones deben ser TRUE):
## [1] FALSE FALSE FALSE FALSE
  • | es “OR” (Al menos una condicion debe ser TRUE):
## [1] TRUE TRUE TRUE TRUE

Operadores lógicos (cont.)

  • ! es “NOT” (niega las propociones logicas, cambiando TRUE por FALSE y viceversa )
## [1]  TRUE FALSE FALSE  TRUE
## [1] TRUE TRUE TRUE TRUE

Extra

## [1] "Catalina" "Roberto"
## [1] "Pedro"   "Roberto"

Extra (cont.)

## [1] FALSE FALSE  TRUE FALSE
## [1] 3
## [1] "Roberto"

NA’s, Inf y NaN

Un valor perdido es codificado como NA sin "".

## [1] NA

Problemas!… los NA no dejan hacer cálculos correctamente. que hacer? remover los valores uno por uno… que lata…

## [1] 0

NA’s, Inf y NaN (cont.)

## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE

Como manejar los NA

## [1] FALSE FALSE    NA FALSE  TRUE    NA    NA FALSE
## [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE

NA’s, Inf y NaN (cont.)

## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE
## [1] -Inf -Inf  NaN  Inf  Inf
##       [,1]  [,2]  [,3]  [,4]  [,5]
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE  TRUE FALSE FALSE

Matrices

Una Matriz extiende los vectores a dos dimensiones. Veamos algunos comandos útiles

##      [,1] [,2] [,3] [,4]
## [1,] "a"  "c"  "e"  "g" 
## [2,] "b"  "d"  "f"  "h"
##      [,1] [,2] [,3] [,4]
## [1,] "a"  "b"  "c"  "d" 
## [2,] "e"  "f"  "g"  "h"

Matrices (cont.)

##      [,1] [,2] [,3]
## [1,]    2    4    6
## [2,]   -1    0   -3
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## [3,]    5    3    5
## [4,]    3    4    6

Aquí tenemos un problema…

Matrices (cont.)

##      [,1] [,2] [,3] [,4]
## [1,] "a"  "c"  "e"  "g" 
## [2,] "b"  "d"  "f"  "h"
## [1] "b" "d" "f" "h"
## [1] "b" "d" "f" "h"

Matrices (cont.)

Ahora el comando para ver el tamaño es dim()

## [1] 2 4
##       Fuma Edad
## Pedro "SI" "18"
## Carla "NO" "31"

¿Algún problema?

## [1] "character"

Listas

Una Lista es un objecto que puede almacenar muchos tipos de datos

## $letras
## [1] "a" "b" "c" "d"
## 
## $matriz
##      [,1] [,2]
## [1,]    8   10
## [2,]    9   11
## 
## $resultados
## 
## Call:
## lm(formula = dist ~ speed, data = cars)
## 
## Coefficients:
## (Intercept)        speed  
##     -17.579        3.932

Listas (cont.)

Como acceder a cada conjunto de datos en una lista?

## [1] "a" "b" "c" "d"
## [1] "a" "b" "c" "d"
## [1] "a" "b" "c" "d"

Vamos a RStudio

Actividad 1

Resolvamos los ejercicios propuestos con lo que hemos aprendido hasta el momento.

  • Descargar el script1_clase1.R

Expresiones Regulares

Detectando Patrones

  • grep() : encuentra las posiciones de las frases que contienen el patron.
  • grepl(): valores lógicos del comando grep().
  • str_detect(): idem a grepl().
  • strsplit() , str_split(): dividen un string usando un patron.
  • str_locate() , str_locate_all(): localiza el patron.
  • str_extract() , str_extract_all(): Extraen las coincidencias (agregando simplify = T, se obtiene una matriz con los resultados.)
  • sub() reemplaza las coincidencias (gsub() reemplaza todas.)
  • str_replace() , str_replace_all(): idem a sub() y gsub().

Obs: todos los str_ son cargando la libreria stringr.

Ejemplos

## [1] 1 2
## [1] "Chile se divide en regiones"       
## [2] "La región del Biobío esta en Chile"

Ejemplos (cont.)

## [1]  TRUE  TRUE FALSE
## [[1]]
## [1] ""            " se divide " " regiones"  
## 
## [[2]]
## [1] "La región del Biobío esta " " "                         
## 
## [[3]]
## [1] "El sur de chile es lo mejor"

Ejemplos (cont.)

## [[1]]
##      start end
## [1,]     1   5
## [2,]    17  18
## 
## [[2]]
##      start end
## [1,]    27  28
## [2,]    30  34
## 
## [[3]]
##      start end

Ejemplos (cont.)

## [[1]]
## [1] "Chile" "en"   
## 
## [[2]]
## [1] "en"    "Chile"
## 
## [[3]]
## character(0)
##      [,1]    [,2]   
## [1,] "Chile" "en"   
## [2,] "en"    "Chile"
## [3,] ""      ""

Extra. paste()

Realize un vector que diga “iter 1”, “iter 2”,…, “iter 5”.

## [1] "iter 1" "iter 2" "iter 3" "iter 4" "iter 5"

Fácil!… pero si necesitamos que sea un vector de la forma “iter 1”,…, “iter 1.000”

##  [1] "iter 45"  "iter 573" "iter 784" "iter 395" "iter 311" "iter 520"
##  [7] "iter 297" "iter 892" "iter 258" "iter 941"

Extra.

  • merge(): Para concatenar 2 bases de datos. (lo veremos más adelante(algo similar) con dplyr)
  • aggregate(): agrega una base de datos. su comportamiento es en fórmula X ~ Y, Si X es una variable númerica e Y una de categorías voy a encontrar una función de X para cada categoría de Y. Entrega un nuevo objeto que es un dataframe.
  • subset(): realiza filtro (similar a [ ]). Le entrego un objeto y le digo que sustraer. Reduce la dimensión del objeto a los que cumplen la condición. Retorna el mismo objeto filtrado.

Vamos a RStudio

Actividad 2

Resolvamos los ejercicios propuestos con la ayuda de las expresiones regulares.

  • Descargar la base de datos Encuesta.xlsx
  • Descargar el script2_clase1.R